package com.xinan.ollama.api.entity;

import com.xinan.ollama.api.vo.Message;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * 公共参数
 *
 * @author yuanz
 * @date 2025-03-25
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class OllamaRequstObj {

    @ApiModelProperty("模型")
    private String model;

    @ApiModelProperty("提示列表")
    private List<Message> messages;

    @ApiModelProperty("是否流输出")
    private boolean stream = false;

    @ApiModelProperty("提示信息")
    private String prompt;

    @ApiModelProperty("内容")
    private String data;

    @ApiModelProperty("模型参数")
    public Options options = new Options();

    @Data
    public static class Options {

        @ApiModelProperty("严谨与想象0-2")
        public  double temperature = 0.2;

        @ApiModelProperty("在生成文本时，保留的候选结果数量。较大的值可能会增加计算成本，但能提供更多样化的选择，有助于提升回答的稳定性和质量。")
        public int num_keep = 3;

        @ApiModelProperty("随机种子，用于初始化随机数生成器。设置固定的种子可以确保生成结果的可重复性，便于调试和测试。")
        public int seed = 123;

        @ApiModelProperty("在生成每个标记时，考虑的最可能的标记数量。较小的值会限制选择范围，使生成的文本更加确定和一致，有助于提高稳定性；较大的值则可能产生更加多样化和创造性的文本。")
        public int top_k = 5;

        @ApiModelProperty("累积概率阈值，用于控制生成文本的多样性和稳定性。较大的值会允许更多的标记被选中，增加多样性；较小的值则更加保守，有助于提高稳定性和准确性。")
        public double top_p = 0.8;

    }

}
